home *** CD-ROM | disk | FTP | other *** search
Wrap
package javax.swing.text; import java.awt.Component; import java.awt.Container; import java.awt.Graphics; import java.awt.Point; import java.awt.Rectangle; import java.awt.Shape; import java.util.Vector; import javax.swing.SizeRequirements; import javax.swing.event.DocumentEvent; import javax.swing.text.Position.Bias; public class ParagraphView extends BoxView implements TabExpander { private int justification; private float lineSpacing; protected int firstLineIndent; private int tabBase; private int layoutSpan = -1; private Vector layoutPool; static char[] tabChars = new char[1]; static char[] tabDecimalChars; static { tabChars[0] = '\t'; tabDecimalChars = new char[2]; tabDecimalChars[0] = '\t'; tabDecimalChars[1] = '.'; } public ParagraphView(Element var1) { super(var1, 1); this.setPropertiesFromAttributes(); } // $FF: synthetic method static int access$0(ParagraphView var0) { return var0.justification; } protected void adjustRow(Row var1, int var2, int var3) { int var4 = ((CompositeView)var1).getViewCount(); int var5 = 0; int var6 = 0; int var7 = 0; int var8 = -1; boolean var9 = false; for(int var11 = 0; var11 < var4; ++var11) { View var10 = ((CompositeView)var1).getView(var11); int var12 = var2 - var5; int var13 = var10.getBreakWeight(0, (float)(var3 + var5), (float)var12); if (var13 >= var6) { var6 = var13; var8 = var11; var7 = var5; if (var13 >= 3000) { break; } } var5 = (int)((float)var5 + var10.getPreferredSpan(0)); } if (var8 >= 0) { int var19 = var2 - var7; View var16 = ((CompositeView)var1).getView(var8); var16 = var16.breakView(0, var16.getStartOffset(), (float)(var3 + var7), (float)var19); View[] var20 = new View[]{var16}; ((BoxView)var1).replace(var8, var4 - var8, var20); int var14 = this.layoutPool.size(); for(int var15 = 0; var15 < var14; ++var15) { var16 = (View)this.layoutPool.elementAt(var15); if (var16.getParent() == null) { var16.setParent(this); } } } } public View breakView(int var1, float var2, Shape var3) { if (var1 == 1) { if (var3 != null) { Rectangle var4 = var3.getBounds(); ((BoxView)this).setSize((float)var4.width, (float)var4.height); } return this; } else { return this; } } protected SizeRequirements calculateMinorAxisRequirements(int var1, SizeRequirements var2) { if (var2 == null) { var2 = new SizeRequirements(); } float var3 = 0.0F; int var4 = this.layoutPool.size(); for(int var5 = 0; var5 < var4; ++var5) { View var6 = (View)this.layoutPool.elementAt(var5); var3 += var6.getPreferredSpan(var1); } float var7 = (float)(var1 == 0 ? ((CompositeView)this).getLeftInset() + ((CompositeView)this).getRightInset() : ((CompositeView)this).getTopInset() + ((CompositeView)this).getBottomInset()); var2.minimum = (int)var7 + 5; var2.preferred = Math.max(var2.minimum, (int)var3); var2.maximum = 32767; var2.alignment = 0.5F; return var2; } public void changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) { this.setPropertiesFromAttributes(); Element var4 = ((View)this).getElement(); DocumentEvent.ElementChange var5 = var1.getChange(var4); if (var5 != null) { this.updateLogicalChildren(var5, var3); } int var6 = var1.getOffset(); int var7 = var6 + var1.getLength(); int var8 = var4.getElementIndex(var6); int var9 = var4.getElementIndex(var7 - 1); if (var6 == var7 && var9 < var8 && var8 > 0) { --var8; var9 = var8 + 1; } for(int var10 = var8; var10 <= var9; ++var10) { View var11 = (View)this.layoutPool.elementAt(var10); var11.changedUpdate(var1, (Shape)null, var3); } this.layoutSpan = Integer.MAX_VALUE; ((BoxView)this).preferenceChanged((View)null, true, true); if (var2 != null) { Rectangle var13 = ((CompositeView)this).getInsideAllocation(var2); this.layout(var13.width, var13.height); Container var12 = ((View)this).getContainer(); ((Component)var12).repaint(var13.x, var13.y, var13.width, var13.height); } } View createView(int var1) { int var2 = ((View)this).getElement().getElementIndex(var1); View var3 = (View)this.layoutPool.elementAt(var2); int var4 = var3.getEndOffset(); AbstractDocument var5 = (AbstractDocument)((View)this).getDocument(); if (var5.getProperty("i18n").equals(Boolean.TRUE)) { Element var6 = var5.getBidiRootElement(); if (var6.getElementCount() > 1) { int var7 = var6.getElementIndex(var1); Element var8 = var6.getElement(var7); var4 = Math.min(var8.getEndOffset(), var4); } } if (var1 == var3.getStartOffset() && var4 == var3.getEndOffset()) { return var3; } else { var3 = var3.createFragment(var1, var4); return var3; } } protected int findOffsetToCharactersInString(char[] var1, int var2) { int var3 = var1.length; int var4 = ((View)this).getEndOffset(); Segment var5 = new Segment(); try { ((View)this).getDocument().getText(var2, var4 - var2, var5); } catch (BadLocationException var10) { return -1; } int var6 = var5.offset; for(int var7 = var5.offset + var5.count; var6 < var7; ++var6) { char var8 = var5.array[var6]; for(int var9 = 0; var9 < var3; ++var9) { if (var8 == var1[var9]) { return var6 - var5.offset + var2; } } } return -1; } protected boolean flipEastAndWestAtEnds(int var1, Position.Bias var2) { Document var3 = ((View)this).getDocument(); return var3 instanceof AbstractDocument && !((AbstractDocument)var3).isLeftToRight(((View)this).getStartOffset(), ((View)this).getStartOffset() + 1); } public float getAlignment(int var1) { switch (var1) { case 0: return 0.5F; case 1: float var2 = 0.5F; if (((CompositeView)this).getViewCount() != 0) { int var3 = (int)((BoxView)this).getPreferredSpan(1); View var4 = ((CompositeView)this).getView(0); int var5 = (int)var4.getPreferredSpan(1); var2 = var3 != 0 ? (float)(var5 / 2) / (float)var3 : 0.0F; } return var2; default: throw new IllegalArgumentException("Invalid axis: " + var1); } } public int getBreakWeight(int var1, float var2) { return var1 == 1 ? 0 : 0; } protected int getClosestPositionTo(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5, int var6, int var7) throws BadLocationException { JTextComponent var8 = (JTextComponent)((View)this).getContainer(); Document var9 = ((View)this).getDocument(); AbstractDocument var10 = var9 instanceof AbstractDocument ? (AbstractDocument)var9 : null; View var11 = ((CompositeView)this).getView(var6); int var19 = -1; var5[0] = Bias.Forward; int var13 = 0; for(int var14 = var11.getViewCount(); var13 < var14; ++var13) { View var15 = var11.getView(var13); int var16 = var15.getStartOffset(); boolean var17 = var10 != null ? var10.isLeftToRight(var16, var16 + 1) : true; if (var17) { var19 = var16; for(int var18 = var15.getEndOffset(); var19 < var18; ++var19) { if (var8.modelToView(var19).getBounds().x >= var7) { return var19; } } --var19; } else { for(var19 = var15.getEndOffset() - 1; var19 >= var16; --var19) { if (var8.modelToView(var19).getBounds().x >= var7) { return var19; } } ++var19; } } if (var19 == -1) { return ((View)this).getStartOffset(); } else { return var19; } } protected View getLayoutView(int var1) { return (View)this.layoutPool.elementAt(var1); } protected int getLayoutViewCount() { return this.layoutPool.size(); } protected int getNextNorthSouthVisualPositionFrom(int var1, Position.Bias var2, Shape var3, int var4, Position.Bias[] var5) throws BadLocationException { int var12; if (var1 == -1) { var12 = var4 == 1 ? ((CompositeView)this).getViewCount() - 1 : 0; } else { if (var2 == Bias.Backward && var1 > 0) { var12 = this.getViewIndexAtPosition(var1 - 1); } else { var12 = this.getViewIndexAtPosition(var1); } if (var4 == 1) { if (var12 == 0) { return -1; } --var12; } else { ++var12; if (var12 >= ((CompositeView)this).getViewCount()) { return -1; } } } JTextComponent var7 = (JTextComponent)((View)this).getContainer(); Caret var8 = var7.getCaret(); Point var9 = var8 != null ? var8.getMagicCaretPosition() : null; int var10; if (var9 == null) { Rectangle var11 = var7.getUI().modelToView(var7, var1, var2); if (var11 == null) { var10 = 0; } else { var10 = var11.getBounds().x; } } else { var10 = var9.x; } return this.getClosestPositionTo(var1, var2, var3, var4, var5, var12, var10); } protected float getPartialSize(int var1, int var2) { float var3 = 0.0F; int var5 = ((CompositeView)this).getViewCount(); int var4 = ((View)this).getElement().getElementIndex(var1); int var7; for(int var9 = this.layoutPool.size(); var1 < var2 && var4 < var9; var1 = var7) { View var6 = (View)this.layoutPool.elementAt(var4++); var7 = var6.getEndOffset(); int var8 = Math.min(var2, var7); if (var6 instanceof TabableView) { var3 += ((TabableView)var6).getPartialSpan(var1, var8); } else { if (var1 != var6.getStartOffset() || var8 != var6.getEndOffset()) { return 0.0F; } var3 += var6.getPreferredSpan(0); } } return var3; } protected float getTabBase() { return (float)this.tabBase; } protected TabSet getTabSet() { return StyleConstants.getTabSet(((View)this).getElement().getAttributes()); } protected View getViewAtPosition(int var1, Rectangle var2) { int var3 = ((CompositeView)this).getViewCount(); for(int var4 = 0; var4 < var3; ++var4) { View var5 = ((CompositeView)this).getView(var4); int var6 = var5.getStartOffset(); int var7 = var5.getEndOffset(); if (var1 >= var6 && var1 < var7) { if (var2 != null) { ((BoxView)this).childAllocation(var4, var2); } return var5; } } if (var1 == ((View)this).getEndOffset()) { View var8 = ((CompositeView)this).getView(var3 - 1); if (var2 != null) { ((BoxView)this).childAllocation(var3 - 1, var2); } return var8; } else { return null; } } protected int getViewIndexAtPosition(int var1) { if (var1 >= ((View)this).getStartOffset() && var1 < ((View)this).getEndOffset()) { for(int var2 = ((CompositeView)this).getViewCount() - 1; var2 >= 0; --var2) { View var3 = ((CompositeView)this).getView(var2); if (var1 >= var3.getStartOffset() && var1 < var3.getEndOffset()) { return var2; } } return -1; } else { return -1; } } public void insertUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) { Element var4 = ((View)this).getElement(); DocumentEvent.ElementChange var5 = var1.getChange(var4); if (var5 != null) { this.updateLogicalChildren(var5, var3); } if (var5 != null && var5.getChildrenAdded().length > 0) { int var12 = var5.getIndex(); int var14 = var1.getOffset(); if (var12 > 0) { Element var17 = var4.getElement(var12 - 1); if (var17.getEndOffset() >= var14) { View var9 = (View)this.layoutPool.elementAt(var12 - 1); var9.insertUpdate(var1, (Shape)null, var3); } } int var18 = var12 + var5.getChildrenAdded().length; if (var18 < this.layoutPool.size()) { Element var19 = var4.getElement(var18); int var10 = var19.getStartOffset(); if (var10 >= var14 && var10 <= var14 + var1.getLength()) { View var11 = (View)this.layoutPool.elementAt(var18); var11.insertUpdate(var1, (Shape)null, var3); } } } else { int var6 = var1.getOffset(); int var7 = var4.getElementIndex(var6); View var8 = (View)this.layoutPool.elementAt(var7); var8.insertUpdate(var1, (Shape)null, var3); if (var7 > 0 && var8.getStartOffset() == var6) { var8 = (View)this.layoutPool.elementAt(var7 - 1); var8.insertUpdate(var1, (Shape)null, var3); } } this.layoutSpan = Integer.MAX_VALUE; ((BoxView)this).preferenceChanged((View)null, true, true); Rectangle var13 = ((CompositeView)this).getInsideAllocation(var2); if (var13 != null) { this.layout(var13.width, var13.height); Container var15 = ((View)this).getContainer(); ((Component)var15).repaint(var13.x, var13.y, var13.width, var13.height); } } protected void layout(int var1, int var2) { if (this.layoutSpan != var1) { this.rebuildRows(var1); int var4 = (int)((BoxView)this).getPreferredSpan(1); if (var2 != var4) { View var5 = ((View)this).getParent(); var5.preferenceChanged(this, false, true); } } super.layout(var1, var2); } void layoutRow(Row var1, int var2) { int var3 = this.tabBase + ((CompositeView)this).getLeftInset(); int var4 = this.layoutSpan; int var5 = ((View)this).getEndOffset(); int var6 = var3; var3 += ((CompositeView)var1).getLeftInset(); var4 -= var3 - var6; int var7 = var4; var6 = var3; boolean var8 = false; while(var2 < var5 && var4 > 0) { View var9 = this.createView(var2); int var10; if (var9 instanceof TabableView) { var10 = (int)((TabableView)var9).getTabbedSpan((float)var3, this); } else { var10 = (int)var9.getPreferredSpan(0); } if (var9.getBreakWeight(0, (float)var2, (float)var4) >= 3000) { int var11 = ((CompositeView)var1).getViewCount(); if (var11 > 0) { var9 = var9.breakView(0, var2, (float)var3, (float)var4); if (var9 != null) { if (var9 instanceof TabableView) { var10 = (int)((TabableView)var9).getTabbedSpan((float)var3, this); } else { var10 = (int)var9.getPreferredSpan(0); } } else { var10 = 0; } } var8 = true; } var4 -= var10; var3 += var10; if (var9 != null) { ((CompositeView)var1).append(var9); var2 = var9.getEndOffset(); } if (var8) { break; } } if (var4 < 0) { this.adjustRow(var1, var7, var6); } else if (((CompositeView)var1).getViewCount() == 0) { View var15 = this.createView(var2); ((CompositeView)var1).append(var15); } if (this.lineSpacing > 1.0F) { float var16 = ((BoxView)var1).getPreferredSpan(1); float var17 = var16 * this.lineSpacing - var16; if (var17 > 0.0F) { ((CompositeView)var1).setInsets(((CompositeView)var1).getTopInset(), ((CompositeView)var1).getLeftInset(), (short)((int)var17), ((CompositeView)var1).getRightInset()); } } } protected void loadChildren(ViewFactory var1) { this.layoutPool = new Vector(); Element var2 = ((View)this).getElement(); int var3 = var2.getElementCount(); for(int var4 = 0; var4 < var3; ++var4) { View var5 = var1.create(var2.getElement(var4)); var5.setParent(this); this.layoutPool.addElement(var5); } } public float nextTabStop(float var1, int var2) { if (this.justification != 0) { return var1 + 10.0F; } else { var1 -= (float)this.tabBase; TabSet var3 = this.getTabSet(); if (var3 == null) { return (float)(this.tabBase + ((int)var1 / 72 + 1) * 72); } else { TabStop var4 = var3.getTabAfter(var1 + 0.01F); if (var4 == null) { return (float)this.tabBase + var1 + 5.0F; } else { int var5 = var4.getAlignment(); int var6; switch (var5) { case 0: case 3: default: return (float)this.tabBase + var4.getPosition(); case 1: case 2: var6 = this.findOffsetToCharactersInString(tabChars, var2 + 1); break; case 4: var6 = this.findOffsetToCharactersInString(tabDecimalChars, var2 + 1); break; case 5: return (float)this.tabBase + var4.getPosition(); } if (var6 == -1) { var6 = ((View)this).getEndOffset(); } float var7 = this.getPartialSize(var2 + 1, var6); switch (var5) { case 1: case 4: return (float)this.tabBase + Math.max(var1, var4.getPosition() - var7); case 2: return (float)this.tabBase + Math.max(var1, var4.getPosition() - var7 / 2.0F); case 3: default: return var1; } } } } } public void paint(Graphics var1, Shape var2) { Rectangle var3 = var2.getBounds(); this.tabBase = var3.x; super.paint(var1, var2); } void rebuildRows(int var1) { this.layoutSpan = var1; int var2 = ((View)this).getStartOffset(); int var3 = ((View)this).getEndOffset(); ((CompositeView)this).removeAll(); int var4 = this.layoutPool.size(); for(int var5 = 0; var5 < var4; ++var5) { View var6 = (View)this.layoutPool.elementAt(var5); var6.setParent(this); } boolean var9 = true; while(var2 < var3) { int var7 = var2; Row var8 = new Row(this, ((View)this).getElement()); if (var9) { ((CompositeView)var8).setInsets((short)0, (short)Math.min(var1 - 5, this.firstLineIndent), (short)0, (short)0); var9 = false; } ((CompositeView)this).append(var8); this.layoutRow(var8, var2); var2 = var8.getEndOffset(); if (var2 <= var7) { throw new StateInvariantError("infinite loop in formatting"); } } } public void removeUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) { Element var4 = ((View)this).getElement(); DocumentEvent.ElementChange var5 = var1.getChange(var4); if (var5 != null) { this.updateLogicalChildren(var5, var3); } if (var5 == null || var5.getChildrenAdded().length == 0) { int var6 = var1.getOffset(); int var7 = var4.getElementIndex(var6); View var8 = (View)this.layoutPool.elementAt(var7); var8.removeUpdate(var1, (Shape)null, var3); if (var7 > 0 && var4.getElement(var7).getStartOffset() == var6) { ((View)this.layoutPool.elementAt(var7 - 1)).removeUpdate(var1, (Shape)null, var3); } } this.layoutSpan = Integer.MAX_VALUE; ((BoxView)this).preferenceChanged((View)null, true, true); if (var2 != null) { Rectangle var9 = ((CompositeView)this).getInsideAllocation(var2); this.layout(var9.width, var9.height); Container var10 = ((View)this).getContainer(); ((Component)var10).repaint(var9.x, var9.y, var9.width, var9.height); } } protected void setFirstLineIndent(float var1) { this.firstLineIndent = (int)var1; } protected void setJustification(int var1) { this.justification = var1; } protected void setLineSpacing(float var1) { this.lineSpacing = var1; } protected void setPropertiesFromAttributes() { AttributeSet var1 = ((View)this).getAttributes(); if (var1 != null) { ((CompositeView)this).setParagraphInsets(var1); this.setJustification(StyleConstants.getAlignment(var1)); this.lineSpacing = StyleConstants.getLineSpacing(var1); this.firstLineIndent = (int)StyleConstants.getFirstLineIndent(var1); } } void updateLogicalChildren(DocumentEvent.ElementChange var1, ViewFactory var2) { int var3 = var1.getIndex(); Element[] var4 = var1.getChildrenRemoved(); for(int var5 = 0; var5 < var4.length; ++var5) { View var6 = (View)this.layoutPool.elementAt(var3); var6.setParent((View)null); this.layoutPool.removeElementAt(var3); } Element[] var9 = var1.getChildrenAdded(); for(int var7 = 0; var7 < var9.length; ++var7) { View var8 = var2.create(var9[var7]); var8.setParent(this); this.layoutPool.insertElementAt(var8, var3 + var7); } } }